// pages/cart/cart.js
import checkLogin from "../../utils/checkLogin";
import {
    changeChecked,
    changeNum,
    deleteCart,
    getCartsList
} from "../../service/cart";
Page({

  /**
   * 页面的初始数据
   */
  data: {
      checkedAll:false,
      allPrice:0,
      goods:[]
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function (options) {
    //验证是否登录
    checkLogin()
  },
    onShow(){
      //获取购物车列表
        const params = {
            include:'goods'
        }
        getCartsList(params).then(res=>{
            // console.log(res.data)
            this.countPrice(res.data)
        })
    },
    /**
     * 选中商品
     */
    oneSelect(event){
        const id = event.target.id
        const isChecked = event.detail

        //让当前点击的商品，选中或者不选中
        const goods = this.data.goods.map(item=>{
            if(item.id == id) item.is_checked = isChecked ? 1 : 0
            return item
        })

        //重新计算价格
        this.countPrice(goods)

        //请求API，设置选中
        this.changeChecked()
    },
    /**
     * 数量改变
     */
    numChange(event){
        const id = event.target.id
        const num = event.detail

        //调用API，修改购物车数量
        changeNum(id,{num}).then(()=>{
            //重新获取购物车列表，重新计算价格 -- 会额外发送请求，为了考虑性能，暂不使用
            //getCartsList(params).then(res=>{
            //  this.countPrice(res.data)
            // })

            //修改指定商品的数量
            const goods = this.data.goods.map(item=>{
                if(item.id == id) item.num = num
                return item
            })

            //重新计算价格
            this.countPrice(goods)
        })
    },
    /**
     * 全选
     */
    allSelect(event){
        const isChecked = event.detail

        //让所有的商品都选中
        const goods = this.data.goods.map(item=>{
            item.is_checked = isChecked ? 1 : 0
            return item
        })

        this.setData({
            checkedAll: isChecked,//设置全选选中
        })

        //重新计算价格
        this.countPrice(goods)

        //请求API,设置选中
        this.changeChecked()
    },

    /**
     * 计算总价格
     */
    countPrice(goods){
        this.setData({
            goods,
            allPrice:0
        })
        //遍历所有商品
        const allPrice = this.data.goods.reduce((pre,item)=>{
            //如果是选中的情况下，累加价格
            if(item.is_checked)  return pre + item.goods.price * item.num * 100
            return pre //如果没有选中，就返回上次的累加结果
        },0)
        this.setData({allPrice})

        //如果商品全部选中，那么设置全选为true
        const checkAll = this.data.goods.findIndex(item=>item.is_checked == 0)
        this.setData({
            checkedAll: checkAll == -1 && goods.length !=0 ? true : false
        })
    },
    /**
     * 改变购物车的选中
     */
    changeChecked(){
        //处理数据，获取所有选中的商品
        const data =[]
        this.data.goods.forEach(item=>{
            if(item.is_checked) data.push(item.id)
        })
        //请求API，将所有选中的商品，提交给API
        changeChecked({cart_ids:data})
    },
    /**
     * 移出购物车
     */
    deleteGoods(event){
        console.log(event)
        //1.获取要删除的ID
        const id = event.target.id

        //2.请求API，移出购物车
        deleteCart(id).then(()=>{
            //3.弹出提示
            wx.showToast({
                title:'移出成功',
                icon:'success'
            })
            //更新页面数据，从新请求购物车列表，会有网络开销，不建议
            //更新页面数据，通过操作数组的方式
            const goods = this.data.goods.filter(currentValue => currentValue.id != id)

            //更新data中的数据
            this.setData({goods})
        })
    },
    /**
     * 跳转到订单预览页
     */
    toPreview(){
        //如果一个商品都没选中，那么就别去结算
        const checkSelected = this.data.goods.findIndex(item=>item.is_checked == 1)

        // console.log(checkSelected)
        //如果一个都不选中，就不结算了
        if(checkSelected == -1){
            wx.showToast({
                title:'至少选着一个商品',
                icon:'none'
            })
        }else{
            wx.navigateTo({
                url:'/pages/preview/preview'
            })
        }
    }
})